# -*- coding: utf-8 -*-
# __author__:heliujiang
# 2022/4/7 18:31


import json
import os
import yaml
import config


def read_yaml_value(file_name, target_key):
    """
    从YAML文件中提取指定key的所有value，并以列表形式返回。
    如果只有一个value，则返回该value的字符串。

    :param file_name: YAML文件的名称。
    :param target_key: 需要提取的key。
    :return: 包含所有对应key的value的列表，或者如果只有一个value，则返回该value的字符串。
    """
    values_list = []

    file_path = os.path.join(config.BASE_PATH, 'data', f'{file_name}.yaml')
    with open(file_path, 'r',encoding='utf-8') as file:
        data = yaml.safe_load(file)

    if isinstance(data, list):
        for item in data:
            if isinstance(item, dict) and target_key in item:
                values_list.append(item[target_key])

    # 如果只有一个值，返回该值的字符串
    if len(values_list) == 1:
        return values_list[0]

    return values_list


def write_yaml_value(json_data, file_name, target_key):
    """
    从JSON数据中提取指定的key，并将它们写入到YAML文件中。

    :param json_data: JSON格式的字符串或字典。
    :param file_name: 输出的YAML文件名。
    :param target_key: 要提取的json数据中的key
    """
    # 如果输入是字符串，先将其转换为字典
    if isinstance(json_data, str):
        data_dict = json.loads(json_data)
    else:
        data_dict = json_data
    content_list = data_dict.get("data", {}).get("content", [])

    apps_data = [{target_key: item.get(target_key)} for item in content_list]
    file_path = os.path.join(config.BASE_PATH, 'data', f'{file_name}.yaml')

    with open(file_path, 'w', encoding='utf-8') as yaml_file:
        yaml.dump(apps_data, yaml_file, allow_unicode=True, default_flow_style=False)


def read_yaml_dict(file_name, target_key):
    """
      读取指定YAML文件中特定键对应的字典数据。

      参数:
      file_name: str, YAML文件的名称，不包含文件扩展名。
      target_key: str, 指定要读取的键名，必须是'dev_secretKey', 'uat_secretKey', 'pro_secretKey'中的一个。

      返回:
      my_dict: dict, 如果找到对应的键，则返回该键对应的字典；否则返回None。
      """
    if target_key not in ['dev_secretKey', 'uat_secretKey', 'pro_secretKey']:
        print(f"Key '{target_key}' is not a valid key in the YAML file.")
        return None

    file_path = os.path.join(config.BASE_PATH, 'data', f'{file_name}.yaml')
    with open(file_path, 'r', encoding='utf-8') as file:
        data = yaml.safe_load(file)
    my_dict = data.get(target_key)

    if my_dict is None:
        print(f"No data found for key '{target_key}'.")

    return my_dict

if __name__ == '__main__':

    # l = read_yaml_value(file_name='application_data_id',target_key='id')
    # l2 = read_yaml_value(file_name='common_data', target_key='id')
    l3 = read_yaml_dict(file_name='appid', target_key='dev_secretKey')

    print(type(l3))
